// #include <iostream>
// using namespace std;

// int Add(int x,int y)
// {
//   return x+y;
// }

// int main()
// {
//   int ret=Add(1,2);
//   cout<<ret<<endl;

//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// using namespace std;
// int main(int argc,char * argv[],char* env[])
// {
//   int ret=fork();
//   if(ret>0)
//   {
//     //父进程
//     while(1)
//     {
//       cout<<"我是父进程"<<endl;
//     sleep(1);

//     }
//   }
//   else
//   {
//     //子进程
//     while(1)
//     {
//     cout<<"我是子进程"<<endl;
//     sleep(1);
//     }
//   }
//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// using namespace std;
// extern char** environ;
// int main(int argc,char * argv[],char* env[])
// {
//   for(int i=0;environ[i];i++)
//   {
//     cout<<environ[i]<<endl;
//   }
//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// using namespace std;
// extern char** environ;
// int main(int argc,char * argv[],char* env[])
// {
//   cout<<getenv("PATH")<<endl;
//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <stdlib.h>
// using namespace std;
// int Func()
//  {
//   cout<<"我是一个函数";
//   exit(-1);
// }
// int main()
// {
//   Func();
//   cout<<"我是一个进程"<<endl;
//   exit(0);

//   return 0;
// }

// #include <iostream>
// #include <sys/types.h>
// #include <sys/wait.h>
// #include <unistd.h>
// using namespace std;
// int main()
// {
//   int ret = fork();
//   if (ret > 0)
//   {
//     int status;
//     while (1)
//     {
//       int wret = waitpid(ret, &status, WNOHANG);
//       if (wret==0)
//       {

//         cout << "do other things..." << endl;
//         sleep(3);
//       }
//       else
//       {
//         // cout << "终止信号为:" << (status & 0x7f) << "退出码:" << ((status >> 8) & 0xff) << endl;
//         cout << "终止信号为:" << (status & 0x7f) << "退出码:" << WEXITSTATUS(wret)<< endl;
//         sleep(1);
//       }
//     }
//   }
//   else
//   {
//     for (int i = 0; i < 30; i++)
//     {
//       cout << i << endl;
//       sleep(1);
//     }

//     exit(20);
//   }

//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// using namespace std;
// int main()
// {
//   //execl("/usr/bin/ls","ls","-l",nullptr);
//   //execlp("ls","ls","-l",nullptr);
//   //const char* const arr[]={"val_1=100","val_2=200"};
//   //execle("/home/lnb/linux-l/24_5_17/childtest","./childtest",nullptr,arr);
//   //execlp("/home/lnb/linux-l/24_5_17/childtest","./childtest",nullptr);
//    char* const arr[]={"ls","-l"};
//    const char* const* c=arr;
//   execv("/usr/bin/ls",arr);
//   cout<<"程序替换失败"<<endl;
//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <sys/types.h>
// #include <fcntl.h>
// #include <sys/stat.h>
// using namespace std;
// int main()
// {
//   umask(0);//修改掩码为0000
//   int fd=open("./config.txt",O_CREAT|O_WRONLY,0666);//mode表示权限
//   if(fd==-1)
//   {
//     return -1;
//   }
//   char buff[1024]="1234\n56789";//'\0'是C语言规定的，不是文件的规定
//   write(fd,buff,5);
//   close(fd);
//   return 0;
// }

// //write的使用
// #include <sys/types.h>
//    #include <sys/stat.h>
//    #include <fcntl.h>
//    #include <unistd.h>
//   #include <string.h>
//    #include <stdio.h>
//    int main()
//    {
//      mode_t mode=0000;//在本次进程中，权限掩码为0000
//   int fd=open("log.txt",O_WRONLY|O_APPEND|O_CREAT,mode);
//   if(fd==-1)
//   {
//     return -1;
//   }
//   char arr[]="我是一个文件";
//   write(fd,arr,strlen(arr));//']'\0'是C语言规定的，不是文件的规定
//   close(fd);//由于关闭文件的函数过于简单，我就不拿出来讲了

//    return 0;
//   }

// //read的使用
// #include <iostream>
// #include <unistd.h>
// #include <sys/types.h>
// #include <fcntl.h>
// #include <sys/stat.h>
// using namespace std;
// int main()
// {
//     int fd=open("./config.txt",O_RDONLY);
//     if(fd==-1)
//     {
//       return -1;
//     }
//     char buff[1024];
//     int n=read(fd,buff,1023);//'\0'是C语言规定的，不是文件的规定
//     if(n==-1)//read函数的返回值表示的是读取了多少字节
//     {
//       return -1;
//     }
//     close(fd);
//     buff[n]='\0';
//     cout<<buff;

//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <sys/types.h>
// #include <fcntl.h>
// #include <sys/stat.h>
// using namespace std;
// int main()
// {
//   close(1);
//   int fd=open("./config.txt",O_WRONLY);
//   if(fd==-1)
//   {
//     return -1;
//   }
//   printf("哈哈哈\n");

//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <sys/types.h>
// #include <fcntl.h>
// #include <sys/stat.h>
// using namespace std;
// int main()
// {
//     cout<<"我是标准输出"<<endl;
//     cerr<<"我是标准错误"<<endl;
//   return 0;
// }

// #include <iostream>
// #include <unistd.h>
// #include <fcntl.h>
// #include <cassert>
// #include <string.h>
// using namespace std;
// int main()
// {
//   int fd[2] = {0};
//   int p = pipe(fd);
//   if (p == -1)
//   {
//     cout << strerror(errno) << endl;
//   }
//   // 父进程读，子进程写
//   int ret = fork();
//   assert(ret >= 0);
//   if (ret > 0)
//   {
//     close(fd[1]);
//     while (1)
//     {
//       // parent
//       char buff[128];
//       //cout<<"read wait"<<endl;
//       int n = read(fd[0], buff, 1024);//读取完全部后，才能使写端继续写
//       if(n==0)
//       {
//         cout<<"The end of reading"<<endl;
//         break;
//       }
//       buff[n] = 0;
//       cout << "parent：receiving from child:" << buff;
//       sleep(1);
//     }
//     close(fd[0]);
//   }
//   else if (ret == 0)
//   {
//     //child
//       int message = 0;
//     close(fd[0]);
//     while (1)
//     {
//       char buff[1024];
//       sprintf(buff, "The message is %d\n", message++);
//       cout<<"write wait"<<endl;
//       write(fd[1], buff, strlen(buff));
//       sleep(1);
//     }
//     close(fd[0]);
//   }
//   else
//   {
//     exit(-1);
//   }

//   return 0;
// }


// #include <iostream>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/ipc.h>
// #include <sys/ipc.h>
// #include <sys/shm.h>
// #include <sys/types.h>
//  #include <sys/stat.h>
// #include <string.h>
// #include "header.hpp"
// using namespace std;
// int main()
// {
//     // int n=fork();
//     // if(n>0)
//     // {
//     //     //父进程,write
//     //     //1.创建key值
//     //     key_t k=CreateFtok();
//     //     //2.创建共享内存
//     //     cout<<1<<endl;
//     //     int shmid=GetShm(k);
//     //     //3.链接共享内存
//     //     cout<<2<<endl;
//     //     char *str=AttachShm(shmid);
//     //     cout<<3<<endl;
//     //     //4.写入
//     //     char c='A';
//     //     while(c<='Z')
//     //     {
//     //         str[c-'A']=c;
//     //         c++;
//     //         str[c-'A']='\0';
//     //         sleep(1);
//     //     }
//     // //5.分离共享内存
//     // DetachShm(str);
//     // sleep(2);
//     // //6.删除共享内存
//     // DeleteShm(shmid);
//     //1.获取key值
// key_t key=CreateFtok();
// //2.获取共享内存
// int shmid=GetShm(key);
// //3.和共享内存关联
// char* start=AttachShm(shmid);
// //4.通信
//     char c = 'A';
//     while (c <= 'Z')
//     {
//         start[c - 'A'] = c;
//         c++;
//         start[c - 'A'] = '\0';
//         sleep(1);
//     }


// //5.脱离关联
//     DetachShm(start);

// }
    // else if(n==0)
    // {
    //     sleep(1);
    //     //子进程,read
    //     //1.获取共享内存
    //     int shmid=GetShm(CreateFtok());
    //     cout<<4<<endl;
    //     //2.链接共享内存
    //     char* ptr=AttachShm(shmid);
    //     cout<<5<<endl;
    //     //3.读取
    //     int count=30;
    //     while(count--)
    //     {
    //         cout<<"client->server:"<<ptr<<endl;
    //         sleep(1);
    //     }
    // //4.分离共享内存
    // DetachShm(ptr);
    // }
    // else
    // {
    //     exit(-2);
    //     cout<<strerror(errno)<<endl;
    
    // }
    // return 0;
// }


// #include "header.hpp"
// int main()
// {
// //1.获取key值
// key_t key=CreateFtok();
// //2.获取共享内存
// int shmid=GetShm(key);
// //3.和共享内存关联
// char* start=AttachShm(shmid);
// //4.通信
//     char c = 'A';
//     while (c <= 'Z')
//     {
//         start[c - 'A'] = c;
//         c++;
//         start[c - 'A'] = '\0';
//         sleep(1);
//     }


// //5.脱离关联
// DetachShm(start);
//     return 0;
// }


#include <signal.h>
#include <unistd.h>
#include <iostream>
using namespace std;
int main()
{
sigset_t


    return 0;
}